清单格式


每个应用程序包都应该包含一个名为 package.json 的清单文件,格式为 JSON。本文档将帮助您了解清单中每个字段的含义。

快速入门

以下是一个最小的清单

{
  "main": "index.html",
  "name": "nw-demo"
}

您只需要这两个字段即可开始使用 NW.js 应用。以下是它们的简要说明

  • main: 告诉 NW.js 在启动时打开与 package.json 相同文件夹中的 index.html
  • name: 为应用程序提供一个名为 nw-demo 的唯一名称。

必填字段

每个包都必须在其包描述符文件中提供以下所有字段。

main

  • {String} 指定 NW.js 启动时应打开哪个 HTML 页面或执行哪个 JavaScript 文件。

您可以在此处指定一个 URL。您也可以只指定一个文件名(例如 index.htmlscript.js)或路径(相对于您的 package.json 所在目录)。

name

  • {String} 包的名称。这必须是一个唯一的、小写的字母数字名称,不包含空格。它可以包含“.”、“_”或“-”字符。否则它是透明的。

name 应该在全局范围内是唯一的,因为 NW.js 会在名为 name 的目录下存储应用程序的数据。

功能控制字段

以下字段控制 NW.js 应该提供哪些功能以及 NW.js 应该如何打开主窗口。

product_string

nodejs

  • {Boolean}nodejs 设置为 false 将禁用 NW.js 中的 Node 支持。

node-main

  • {String} 指定 node.js 脚本文件的路径。它将在启动时在 Node 上下文中执行,在第一个 DOM 窗口加载之前。

domain

  • {String} 指定应用程序使用的 chrome-extension:// 协议 URL 中的主机。Web 引擎将在您的应用程序和同一域下的网站之间共享相同的 Cookie。

single-instance

已弃用

此属性自 0.13.0 起已弃用。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • {Boolean} 指定是否启动应用程序的单个实例。默认情况下设置为 true

默认情况下,NW.js 只允许您的应用程序的一个实例。如果您想允许您的应用程序的多个实例同时运行,请将其设置为 false

bg-script

  • {String} 后台脚本。该脚本在应用程序启动时在后台页面中执行。

window

webkit

  • {Object} 控制 WebKit 的哪些功能应该开启/关闭,请参阅下面的 WebKit 子字段

user-agent

  • {String} 覆盖应用程序发出的 HTTP 请求中的 User-Agent 标头。

以下占位符可用于动态组合用户代理

  • %name: 由清单中的 name 字段替换。
  • %ver: 由清单中的 version 字段替换(如果可用)。
  • %nwver: 由 NW.js 的版本替换。
  • %webkit_ver: 由 Blink 引擎的版本替换。
  • %chromium_ver: 由 Chromium 版本替换
  • %osinfo: 由您在浏览器用户代理字符串中看到的操作系统和 CPU 信息替换。

node-remote

行为已更改

此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • {Array}{String} 启用在远程页面中调用 Node。该值控制应为哪些站点启用此功能。数组中的每个项目都遵循 Chrome 扩展程序中使用的 匹配模式

匹配模式本质上是一个以允许的方案(httphttpsfileftp)开头的 URL,并且可以包含 '*' 字符。特殊模式 <all_urls> 匹配以允许的方案开头的任何 URL。每个匹配模式都有 3 个部分

  • scheme — 例如,httpfile*
  • host — 例如,www.google.com*.google.com*;如果方案是文件,则没有主机部分
  • path — 例如,/*/foo*/foo/bar。路径必须存在于主机权限中,但始终被视为 /*

以下是基本语法

<url-pattern> := <scheme>://<host><path>
<scheme> := '*' | 'http' | 'https' | 'file' | 'ftp'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars>

chromium-args

  • {String} 指定 chromium(内容外壳)命令行参数。

如果您想将应用程序与一些自定义 chromium 参数一起分发,这将很有用。例如,如果您想禁用 GPU 加速的视频显示,只需添加 "chromium-args" : "--disable-accelerated-video"。如果您想添加多个参数,请用空格分隔每两个参数。此字段也可以在一个参数中包含多个标志,方法是将它们括在单引号中。

NW_PRE_ARGS 环境变量的值将附加到此字段的值之前。

有关更多信息,请参阅 命令行选项

crash_report_url

  • {String} 崩溃报告服务器的 URL

应用程序崩溃后,崩溃转储文件和有关运行时环境的信息将发送到崩溃服务器。它以与 Chromium 浏览器相同的方式发送:一个带有 multipart/form-data 作为内容类型的 HTTP POST 请求。理论上,任何 breakpad/crashpad 服务器都可以处理该请求,因为 breakpad/crashpad 在 NW 中的工作方式与在 Chromium 中相同。请参阅 我们测试用例中使用的非常简单的服务器,或 simple-breakpad-server

请求至少包含以下字段

  • prod - 应用程序清单中的 name 字段
  • ver - 应用程序清单中的 version 字段
  • upload_file_minidump - 小内存转储文件的二进制内容
  • switch-n - 崩溃进程的命令行开关。每个开关都有多个字段,其中 n 是从 1 开始的数字。

js-flags

  • {String} 指定传递给 JS 引擎 (v8) 的标志。例如,打开 Harmony 代理和集合功能
{
  "name": "nw-demo",
  "main": "index.html",
  "js-flags": "--harmony_proxies --harmony_collections"
}

可以在此处找到支持的 V8 标志列表:https://chromium.googlesource.com/v8/v8/+/master/src/flag-definitions.h

inject_js_start

inject_js_end

  • {String} 相对于应用程序路径的本地文件名,用于指定要注入到窗口的 JavaScript 文件。

inject_js_start:注入的 JavaScript 代码将在任何来自 css 的文件之后执行,但在任何其他 DOM 被构建或任何其他脚本运行之前执行。

inject_js_end:注入的 JavaScript 代码将在文档对象加载后执行,在 onload 事件触发之前执行。这主要用作 Window.open() 的选项,用于在新的窗口中注入 JS。

additional_trust_anchors

  • {Array} 包含一个 PEM 编码证书列表(例如 "-----BEGIN CERTIFICATE-----\n...证书数据...\n-----END CERTIFICATE-----\n")。

这些证书用作验证的附加根证书,以允许连接到使用自签名证书或自定义 CA 颁发的证书的服务。

dom_storage_quota

  • {Integer} DOM 存储配额的兆字节 (MB) 数。建议设置您想要的数值的两倍。

no-edit-menu (Mac)

已弃用

此属性自 0.13.0 起已弃用。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • {Boolean} 是否在 Mac OS X 上禁用默认的 Edit 菜单。默认值为 false。仅在 Mac OS X 上有效。

窗口子字段

大多数窗口子字段默认情况下会由 window.open() 或链接(<a target="_blank">)打开的子窗口继承。未继承的子字段例外列表如下。它们将被设置为打开窗口的默认值

  • fullscreen -> false
  • kiosk -> false
  • position -> null
  • resizable -> true
  • show -> true

所有窗口子字段都可以通过使用 new-win-policy 事件 覆盖。

id

  • {String} 用于标识窗口的 id。这将用于记住窗口的大小和位置,并在以后打开具有相同 id 的窗口时恢复该几何形状。 另请参阅 Chrome 应用文档

title

  • {String} 由 NW.js 创建的窗口的默认标题,如果您想在应用程序启动时显示自己的标题,它非常有用。

width

height

  • {Integer} 主窗口的初始内部宽度/高度。

toolbar

已弃用

此属性自 0.13.0 起已弃用。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • {Boolean} 是否显示导航工具栏。

icon

  • {String} 窗口图标的路径

position

  • {String}nullcentermouse,控制窗口将放置的位置

min_width

min_height

  • {Integer} 窗口的最小内部宽度/高度

max_width

max_height

  • {Integer} 窗口的最大内部宽度/高度

as_desktop (Linux)

  • {Boolean} 在 X11 环境下显示为桌面背景窗口

resizable

  • {Boolean} 窗口是否可调整大小

注意,如果在 OS X 上将 resizable 设置为 false 并且 frame 设置为 true,用户仍然可以使窗口全屏。将 fullscreen 设置为 false 以禁用全屏控制。

always_on_top

行为已更改

此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • {Boolean} 窗口是否应始终保持在其他窗口之上。

visible_on_all_workspaces (Mac & Linux)

行为已更改

此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • {Boolean} 窗口是否应在所有工作区上同时可见(在支持多个工作区的平台上,目前为 Mac OS X 和 Linux)。

fullscreen

  • {Boolean} 窗口是否全屏

注意,如果 frame 也在 fullscreen 中设置为 false,它将阻止鼠标被捕获在屏幕的最边缘。如果 fullscreen 也设置为 true,您应该避免激活它。

show_in_taskbar

  • {Boolean} 窗口是否显示在任务栏或停靠栏中。默认值为 true

frame

  • {Boolean} 将其指定为 false 以使窗口无边框

注意,如果在全屏模式下将 frame 设置为 false,则会阻止鼠标捕获屏幕最边缘的区域。如果也设置了全屏模式,则应避免激活它。

无边框应用程序没有标题栏供用户点击并拖动窗口。您可以使用 CSS 将 DOM 元素指定为可拖动区域。

.drag-enable {
  -webkit-app-region: drag;
}
.drag-disable {
  -webkit-app-region: no-drag;
}

show

  • {Boolean} 如果您希望应用程序在启动时隐藏,请将其指定为 false

kiosk

  • {Boolean} 是否使用 Kiosk 模式。在 Kiosk 模式下,应用程序将全屏显示并尝试阻止用户离开应用程序,因此您应该记住在应用程序中提供一种离开 Kiosk 模式的途径。此模式主要用于公共显示器上的演示

transparent

  • {Boolean} 是否开启透明窗口模式。默认值为 false

使用 CSS 中的 rgba 背景值控制透明度。使用命令行选项 --disable-transparency 完全禁用此功能。

对透明区域的“点击穿透”有实验性支持:在命令行中添加 --disable-gpu 选项。

WebKit 子字段

double_tap_to_zoom_enabled

  • {Boolean} 使用 Mac 上双指双击启用缩放,默认值为 false。

plugin

  • {Boolean} 是否加载外部浏览器插件,如 Flash,默认值为 true。

其他字段

Packages/1.0 标准指定了 package.json 应提供的许多其他字段。目前我们没有使用它们,但您仍然可以提供它们。